/**一些算法整理,模仿php
 * Created by PhpStorm.
 * User:  iyahe@qq.com (天明)
 * Date: 2019/11/26 0026
 * Time: 下午 16:28
 * Description:
 */
const md5Model = require('md5');
const Base64 = require('js-base64').Base64;
const JSEncrypt = require('jsencrypt').JSEncrypt;
class Index {
	constructor(){}
	init () {}
	/**
	 * md5 算法
	 * @param str
	 * @returns {*}
	 */
	md5 (str) {
		return md5Model(str)
	}
	/**
	 * base64 加密
	 * @param str
	 * @returns {Uint8Array}
	 */
	base64_encode (str) {
		return Base64.encode(str);
	}
	/**
	 * base64解密
	 * @param str
	 */
	base64_decode (str) {
		Base64.decode(str);
	}
	/**
	 * 获取一个随机数
	 * @param prefix 前缀
	 * @param len 长度
	 * @returns {string}
	 */
	uniqid (prefix = '', len = 16) {
		const that = this;
		const func = {
			get:function () {
				return that.md5(that.base64_encode(Math.random()));
			}
		};
		// TODO 如有前缀,则返回带前缀的
		if (prefix) {
			return prefix + func.get().substr(0, (len-1))
		} else {
			return func.get().substr(0, len)
		}
	}
	/**
	 * 获取min到max之间的随机数
	 * @param min
	 * @param max
	 * @returns {number}
	 */
	rand (min, max) {
		return parseInt(Math.random()*(max-min) + min);
	}
	/**
	 * 公钥加密
	 * @param key
	 * @param text
	 * @returns {PromiseLike<ArrayBuffer>}
	 */
	rsa_encrypt (key, text) {
		const encrypt = new JSEncrypt();
		encrypt.setPublicKey(key);
		return encrypt.encrypt(text);
	}
	/**
	 * 私钥解密
	 * @param key
	 * @param text
	 * @returns {PromiseLike<ArrayBuffer>}
	 */
	rsa_decrypt (key, text) {
		const decrypt = new JSEncrypt();
		decrypt.setPrivateKey(key);
		return decrypt.decrypt(text);
	}
  
  /** 来自网络: https://blog.csdn.net/qq_37568049/article/details/80736305
   * 生成GUID （全球唯一标识符）
   * @param len 默认是 16进制
   * @returns {string}
   */
  guid (len = 16) {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
      var r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8);
      return v.toString(len);
    });
  }
}

module.exports = new Index();
